/**
 * 
 * 不同路径的数目(一)
 * 
 * 描述

一个机器人在m×n大小的地图的左上角（起点）。
机器人每次可以向下或向右移动。机器人要到达地图的右下角（终点）。
可以有多少种不同的路径从起点走到终点？

备注：m和n小于等于100,并保证计算结果在int范围内

数据范围：
0
<
n
,
m
≤
100
0<n,m≤100，保证计算结果在32位整型范围内
要求：空间复杂度 
O
(
n
m
)
O(nm)，时间复杂度 
O
(
n
m
)
O(nm)
进阶：空间复杂度 
O
(
1
)
O(1)，时间复杂度 
O
(
m
i
n
(
n
,
m
)
)
O(min(n,m))
 */
public class 不同路径的数目1 {
    
    public static void main(String[] args) {
        
        System.out.println(uniquePaths(2, 1));

    }

    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
    public static int uniquePaths (int m, int n) {
        // write code here

        int[][] dp = new int[m][n];
        for (int i = 0; i < m; i++) {
            dp[i][0] = 1;
        }
        for (int j = 0; j < n; j++) {
            dp[0][j] = 1;
        }
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        return dp[m - 1][n - 1];
    }
}
